package com.zh.blog.controller.user;

import com.zh.blog.annotation.OptLog;
import com.zh.blog.common.api.Result;
import com.zh.blog.dto.UserBackDto;
import com.zh.blog.dto.UserRoleDto;
import com.zh.blog.service.RoleService;
import com.zh.blog.service.UserAuthService;
import com.zh.blog.service.UserInfoService;
import com.zh.blog.vo.ConditionVO;
import com.zh.blog.vo.PageResult;
import com.zh.blog.vo.UserDisableVO;
import com.zh.blog.vo.UserRoleVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;

import java.util.List;

import static com.zh.blog.constant.OptTypeConst.UPDATE;

/**
 * 用户列表控制器
 * @author ZhengHao
 * Created At 2022/8/7.
 **/
@Api(tags = "用户列表模块")
@RestController
public class UserListController {
    @Autowired
    private UserInfoService userInfoService;
    @Autowired
    private UserAuthService userAuthService;
    @Autowired
    private RoleService roleService;

    /**
     * 修改用户角色
     * @param userDisableVO 用户角色信息
     * @return
     */
    @OptLog(optType = UPDATE)
    @ApiOperation(value = "修改用户禁用状态")
    @PutMapping("/admin/users/disable")
    public Result<?> updateUserDisable(@Valid @RequestBody UserDisableVO userDisableVO) {
        userInfoService.updateUserDisable(userDisableVO);
        return Result.ok();
    }

    /**
     * 修改用户角色
     * @param userRoleVO 用户角色信息
     * @return
     */
    @OptLog(optType = UPDATE)
    @ApiOperation(value = "修改用户角色")
    @PutMapping("/admin/users/role")
    public Result<?> updateUserDisable(@Valid @RequestBody UserRoleVO userRoleVO) {
        userInfoService.updateUserRole(userRoleVO);
        return Result.ok();
    }

    /**
     * 查询后台用户列表
     * @param conditionVO 条件
     * @return 用户列表
     */
    @ApiOperation(value = "查询后台用户列表")
    @GetMapping("/admin/users")
    public Result<PageResult<UserBackDto>> listUsers(ConditionVO conditionVO) {
        return Result.ok(userAuthService.listUserBackDto(conditionVO));
    }

    /**
     * 查询用户角色选项
     * @return 用户角色选项
     */
    @ApiOperation(value = "查询用户角色选项")
    @GetMapping("/admin/users/role")
    public Result<List<UserRoleDto>> listUserRoles(){
        return Result.ok(roleService.listUserRoles());
    }

}